//#define  _CRT_SECURE_NO_WARNINGS
//#include <vector>
//#include <iostream>
//#include <unordered_map>
//#include <queue>
//#include <climits>
//using namespace std;
//int m, n;
//unordered_map<int, vector<int>> map1;
//unordered_map<int, vector<int>> map2;
//unordered_map<int, vector<int>> map3;
//
//int tmp;
//bool vis[5005];
//int bfs(int cur, int dest, queue<int> q)
//{
//	q.push(cur);
//	vis[cur] = true;
//	while (q.size())
//	{
//		tmp++;
//		int sz = q.size();
//		while (sz--)
//		{
//			int frontt = q.front(); q.pop();
//			auto e = map1[frontt];
//			for (auto v : e)
//			{
//				if (v == dest) return tmp;
//				if (!vis[v])
//				{
//					q.push(v);
//					vis[v] = true;
//				}
//			}
//		}
//	}
//	return tmp;
//}
//int main()
//{
//	cin >> m >> n;
//	vector<int> arr(m + 1);
//	for (int i = 1; i <= m; i++)
//	{
//		cin >> arr[i];
//		map2[arr[i]].push_back(i);
//	}
//	for (auto e : map2)
//	{
//		auto x = e.second;
//		for (auto xx : x)
//		{
//			for (auto xxx : x)
//				map3[xx].push_back(xxx);
//		}
//	}
//	while (--m)
//	{
//		int a, b;
//		cin >> a >> b;
//		map1[a].push_back(b);
//		map1[b].push_back(a);
//	}
//	int result = INT_MAX;
//	while (n--)
//	{
//		int start, end;
//		cin >> start >> end;
//		auto e = map3[end];
//		result = INT_MAX;
//		for (auto v : e)
//		{
//			queue<int> q;
//			memset(vis, false, sizeof vis);
//			bool flag = false;
//			for (auto v1 : e)
//			{
//				if (v1 == start)
//				{
//					result = 0;
//					flag = true;
//					break;	
//				}
//			}
//			tmp = 0;
//			if(flag == false)
//				result = min(result, bfs(start, v, q));
//		}
//		cout << result << endl;
//	}
//	return 0;
//}
//
///*
//6 3
//1 3 2 1 2 3
//1 2
//1 3
//2 4
//2 5
//3 6
//2 6
//3 2
//4 3
//*/